package fr.upmc.aladyn.transactionables.tests.application;

import fr.upmc.aladyn.transactionables.annotations.Transactionable;

/**
 * <p>Test class</p>
 * @author Alexis Deluze
 *
 */

@Transactionable
public class Adulte extends Personne {

	private int nbEnfants;
	private Adulte conjoint;
	private int compteBancaire;

	public Adulte(String nom, int age){
		super(nom, age);
		this.conjoint = null;
		this.nbEnfants = 0;
		this.compteBancaire = 1000;
	}
	
	@Override
	public void print(){
		System.out.println("\n#--------------------------\n# Adulte : "+getNom()
				+"\n# age       = "+getAge()
				+"\n# nbEnfants = "+nbEnfants
				+"\n# etatCivil = "+getEtatCivil()
				+"\n# Argent    = "+getCompteBancaire());
		if(conjoint != null){
			System.out.println("# Conjoint = "+conjoint.getNom());
		}
		System.out.println("#--------------------------\n");
	}
	
	@Override
	@Transactionable
	public void anniversaire(){
		System.out.println("\n#--------------------------");
		System.out.println("# C'est l'anniversaire de "+getNom()+", age : "+(getAge()+1)+" ans.");
		System.out.println("#--------------------------\n");
		setAge(getAge() + 1);
		if(conjoint != null){
			recevoirCadeau(conjoint);
		}
	}
	
	@Transactionable
	public void recevoirCadeau(Personne p){
		System.out.println("\n#--------------------------");
		System.out.println("# "+p.getNom()+ " lui fait un cadeau");
		System.out.println("#--------------------------\n");
		conjoint.retirerArgent(30);
	}

	public int getNbEnfants() {
		return nbEnfants;
	}

	public void setNbEnfants(int nbEnfants) {
		this.nbEnfants = nbEnfants;
	}

	public Adulte getConjoint() {
		return conjoint;
	}

	public void setConjoint(Adulte conjoint) {
		this.conjoint = conjoint;
		if(conjoint != null) setEtatCivil(EtatCivil.Marie);
	}
	
	public int getCompteBancaire() {
		return compteBancaire;
	}

	public void setCompteBancaire(int compteBancaire) {
		this.compteBancaire = compteBancaire;
	}
	
	public void retirerArgent(int montant){
		setCompteBancaire(compteBancaire - montant);
	}
	
	public void deposerArgent(int montant){
		setCompteBancaire(compteBancaire + montant);
	}
}
